#ifndef __THREADPOOL_H__
#define __THREADPOOL_H__
#include "myfunc.h"
#include "mysqlop.h"
#define PASSWD_LEN 20

typedef struct task_s{
    int netFd;//传递文件描述符
    struct task_s *pNext;
} task_t;

typedef struct taskQueue_s{
    task_t *pFront;//队首指针
    task_t *pRear;//队尾指针
    int size;//队列现在的长度
    pthread_mutex_t mutex;
    pthread_cond_t cond;
} taskQueue_t;

typedef struct threadPool_s {
    pthread_t *tid;//子线程的数组
    int threadNum;//子线程的数量
    taskQueue_t taskQueue;
    int exitFlag;
    char passwd[PASSWD_LEN];
} threadPool_t;

typedef struct train_s{
    int length;
    char buf[4096];
} train_t;


int taskEnqueue(taskQueue_t *pTaskQueue, int netFd);    //任务入队
int taskDequeue(taskQueue_t *pTaskQueue);               //任务出队
int threadPoolInit(threadPool_t *pThreadPool, char conf[][128]);//线程池初始化
int makeWorker(threadPool_t *pThreadPool);              //创建子线程
int tcpInit(int *pSockFd, char *ip, char *port);        //初始化tcp
int epollAdd(int fd, int epfd);                         //在epoll中添加要监听的套接字
int epollDel(int fd, int epfd);                         //在epoll中删除监听的套接字
int recvFile(int netFd, char *filename);                //接收文件描述符指定连接发送的文件
int sendFile(int netFd, char *filename);                //向文件描述符指定的连接发送文件
int sendn(int sockFd, void * buf, int len);
int recvn(int sockFd,void *buf, int len);             //接收n个字符的数据
int msgprocess(int netFd, train_t * train); 
int readmd5(char *filename, char * buf);                //读取md5sum命令的结果并写入buf中
#endif
